home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume89 / util / colset.1 < prev    next >
Internet Message Format  |  1989-11-02  |  54KB

  1. Path: xanth!samsung!cs.utexas.edu!sun-barr!newstop!sun!swap!page
  2. From: page%swap@Sun.COM (Bob Page)
  3. Newsgroups: comp.sources.amiga
  4. Subject: v89i193:  column_set -- join lines into columns
  5. Message-ID: <127256@sun.Eng.Sun.COM>
  6. Date: 2 Nov 89 03:53:32 GMT
  7. Sender: news@sun.Eng.Sun.COM
  8. Lines: 1297
  9. Approved: page@sun.com
  10.  
  11. Submitted-by: xanthian@well.sf.ca.us (Kent Paul Dolan)
  12. Posting-number: Volume 89, Issue 193
  13. Archive-name: util/colset.1
  14.  
  15. column_set accepts input as one "word" per line and produces these
  16. "words" layed out in the same order in even columns, as many as will fit
  17. across the output screen or page with at least one space between columns.
  18.  
  19. [Useful for 'dir' listings -- sample directory lister included.
  20.  Source is in modula-2.  Encoded executable also included.  ..bob]
  21.  
  22. # This is a shell archive.
  23. # Remove anything above and including the cut line.
  24. # Then run the rest of the file through 'sh'.
  25. # Unpacked files will be owned by you and have default permissions.
  26. #----cut here-----cut here-----cut here-----cut here----#
  27. #!/bin/sh
  28. # shar: SHell ARchive
  29. # Run the following text through 'sh' to create:
  30. #    README
  31. #    ld
  32. #    column_set.MOD
  33. #    column_set.doc
  34. #    column_set.uu
  35. # This is archive 1 of a 1-part kit.
  36. # This archive created: Wed Nov  1 19:46:18 1989
  37. echo "extracting README"
  38. sed 's/^X//' << \SHAR_EOF > README
  39. XEnclosed are:
  40. X
  41. Xcolumn_set.MOD - BENCHMARK Modula-2 source code for the column_set executable.
  42. X
  43. Xcolumn_set.doc - an excuse sheet for foisting this program on an unsuspecting
  44. X                 Amiga community.
  45. X
  46. Xcolumn_set     - an executable to typeset a file of one "word" per line into
  47. X                 as many even columns as will fit across a page with at least
  48. X                 one space between columns, with lots of options.
  49. X
  50. Xld             - a primitive directory listing AmigaDOS script (hopefully
  51. X                 self documenting) which uses the column_set executable to
  52. X                 lay out a listing of a directory with more than two columns
  53. X                 of (sorted) file names.  Uses AmigaDOS functions "list" and
  54. X                 "sort", my "column_set", and the PD routine "less".  This
  55. X                 is included because it was my dissatisfaction with the "dir"
  56. X                 output that led me to write column_set in the first place.
  57. X                 In typical Unix(tm) fashion, I used working routines where
  58. X                 possible, and wrote only the minimum additional code needed
  59. X                 to complete the task, as "column_set.MOD".  Script "ld" is
  60. X                 a moderately interesting example in itself for those, like
  61. X                 me, to whom the AmigaDOS Manual's description of script
  62. X                 construction leaves working examples lacking, and concepts
  63. X                 unclear.
  64. X
  65. X
  66. XKent Paul Dolan, xanthian@well.sf.ca.us, 27 October 1989
  67. SHAR_EOF
  68. echo "extracting ld"
  69. sed 's/^X//' << \SHAR_EOF > ld
  70. X.KEY pathname,width,dirtag
  71. X.DEF pathname ""
  72. X.DEF width 77
  73. X.DEF dirtag /
  74. X.BRA {
  75. X.KET }
  76. X; AmigaDOS script "ld" by Kent Paul Dolan
  77. X;
  78. X; Accepts a single parameter, the pathname of the directory to be listed.
  79. X; Produces a sorted directory with as many columns as will fit in a full
  80. X; width (77 character wide) Amiga bordered window, such as the one for
  81. X; the AmigaShell or, here, the "less" file display utility, and displays
  82. X; it using the PD "less" utility.  All work files are in "T:" and are
  83. X; deleted at the end of the script.  The "column_set" program is a small
  84. X; PD Modula-2 utility written by the author of this script.
  85. X;
  86. X; Create a single column listing of the files in <pathname>
  87. X;
  88. Xlist > t:ld.1 {pathname} files lformat="%S"
  89. X;
  90. X; Add the directories to the listing, but flag them with a tag string to
  91. X; distinguish them from the files.
  92. X;
  93. Xlist >> t:ld.1 {pathname} dirs lformat="%S{dirtag}"
  94. X;
  95. X; Sort the lot together.
  96. X;
  97. Xsort from t:ld.1 to t:ld.2
  98. X;
  99. X; Use my PD Modula-2 utility to rearrange the names into as many columns
  100. X; as will fit in a full sized window; "column_set" does one pass to
  101. X; size the file names looking for the longest name, and a second pass
  102. X; to create the output from the input.  Input is a file with one file or
  103. X; directory name per line, output is the same set of names set in columns.
  104. X;
  105. Xcolumn_set -w {width} t:ld.2 t:ld.3 
  106. X;
  107. X; Use the PD "less" utility to put up a window in which the directory
  108. X; names may be scrolled up and down; if you don't have "less", replace
  109. X; it here with "more", the standard AmigaDOS text file display routine.
  110. X;
  111. Xless t:ld.3
  112. X;
  113. X; Clean up the work files.
  114. X;
  115. Xdelete t:ld.1 t:ld.2 t:ld.3
  116. SHAR_EOF
  117. echo "extracting column_set.MOD"
  118. sed 's/^X//' << \SHAR_EOF > column_set.MOD
  119. XMODULE column_set;
  120. X
  121. X(* Copyright 1989 by Kent Paul Dolan, USENet: xanthian@well.sf.ca.us          *)
  122. X(* Use it as you wish, but leave me a little credit somewhere in the result!  *)
  123. X
  124. X(* Developed with BENCHMARK Modula-2 from Avante-Garde Software               *)
  125. X
  126. X(* Purpose: to lay out "words" from a file of one word per line in as many    *)
  127. X(* columns as will fit across the page with at least one space between        *)
  128. X(* columns.  Command usage is described further down in the code.  This code  *)
  129. X(* was written to provide a filter in a script for making the output of the   *)
  130. X(* AmigaDOS "list lformat="%S" command look like the Unix "ls" output, but    *)
  131. X(* looks useful as an independent command, as well.                           *)
  132. X
  133. X(* It is a modest attempt at mixing a Unix and an AmigaDOS command format in  *)
  134. X(* a small utility, while reasonably bullet-proofing the routine from command *)
  135. X(* line errors or i/o problems.  The working guts of the program, without     *)
  136. X(* the frills, takes up 1/3 the source and 1/2 the runtime space; this is an  *)
  137. X(* exercise in doing the job "right", for the fun of it.   Kent.              *)
  138. X
  139. XFROM System IMPORT argc, argv, StdInput, StdOutput;
  140. X
  141. XFROM InOut IMPORT WriteString, WriteInt, WriteLn, Write, Read, OpenInputFile,
  142. X                  OpenOutputFile, Done, CloseInput, CloseOutput, EOL;
  143. X
  144. XIMPORT Terminal;
  145. X
  146. XFROM Terminal IMPORT eof;
  147. X
  148. XFROM FileSystem IMPORT Response, File, Lookup, Close, Delete, ReadChar,
  149. X                       WriteChar;
  150. X
  151. XFROM Strings IMPORT CompareStringCAP, LocateChar, CopyString, Relation;
  152. X
  153. XCONST
  154. X  DefaultWindowWidth = 77;
  155. X  TempFileName = "T:column_set.temp";
  156. X
  157. XTYPE
  158. X  CommandLineParam = ARRAY [0..255] OF CHAR;
  159. X  
  160. XVAR
  161. X  Ch:             CHAR;
  162. X
  163. X  InFile,
  164. X  OutFile:        CommandLineParam;
  165. X
  166. X  MaxLength, 
  167. X  WindowWidth,
  168. X  ThisLength,
  169. X  MaxColumns,
  170. X  NumColumns,
  171. X  ThisColumn,
  172. X  NumSpaces,
  173. X  I:              INTEGER;
  174. X
  175. X  TempFile:       File;
  176. X
  177. X  UsingStdInput,
  178. X  UsingStdOutput,
  179. X  WentOK:         BOOLEAN;
  180. X
  181. X(*
  182. X** Usage: column_set [[FROM | -i] infile] [[TO | -o] outfile] [[WIDTH | -w] nn]
  183. X**        [[MAXCOL | -m] mm]
  184. X**
  185. X** infile is the input file, one "word" per line;
  186. X** outfile is the output file, with the same words in the same order laid out
  187. X** in columns evenly across the page or screen;
  188. X** width is the number of character positions across the screen or page;
  189. X** default is 77 to fit a standard AmigaDOS window;
  190. X** maxcol limits the number of columns of words which will be set across the
  191. X** page to less than the maximum possible; default is (width+1)/2;
  192. X**
  193. X** where infile, outfile, width and maxcol are positional parameters unless the
  194. X** keywords are present.  If no infile is given, standard input is used, and
  195. X** a temporary file "column_set.temp" is created and deleted to allow a second
  196. X** pass over the input data.  If an infile is given, it is closed and reopened
  197. X** for the second pass over the data.  If no outfile is given, standard output
  198. X** is used.
  199. X*)
  200. X
  201. XPROCEDURE usage;
  202. XBEGIN
  203. X  WriteLn;
  204. X  WriteString
  205. X  ("Usage: column_set [FROM | -i] infile [TO | -o] outfile [WIDTH | -w] ww");
  206. X  WriteLn;
  207. X  WriteString
  208. X  ("       [MAXCOL | -m] mm]");
  209. X  WriteLn;
  210. X  WriteString
  211. X  ("   or: column_set < infile > outfile [{WIDTH | -w} ww] [{MAXCOL | -m} mm]");
  212. X  WriteLn;
  213. X  WriteString
  214. X  ("   or: column_set [(WIDTH | -w} ww] [{MAXCOL | -m} mm] infile outfile");
  215. X  WriteLn;
  216. X  WriteString
  217. X  ("or other likely combinations; infile, outfile, ww, and mm are positional");
  218. X  WriteLn;
  219. X  WriteString
  220. X  ("without keywords, position independent with keywords, and mixes are read");
  221. X  WriteLn;
  222. X  WriteString
  223. X  ("by trying to pick off first the keyword parmameters, then the missing");
  224. X  WriteLn;
  225. X  WriteString
  226. X  ("positional parameters in order from what is left over.");
  227. X  WriteLn;
  228. X  WriteString
  229. X  ("'Infile' is the input file, expected to contain one 'word' per line;");
  230. X  WriteLn;
  231. X  WriteString
  232. X  ("'outfile' is the output file, which will contain the same 'words' in the");
  233. X  WriteLn;
  234. X  WriteString
  235. X  ("same order laid out in as many even columns as will fit across the");
  236. X  WriteLn;
  237. X  WriteString
  238. X  ("page or screen; 'ww' is the width of the screen or page in character");
  239. X  WriteLn;
  240. X  WriteString
  241. X  ("positions; 'mm' is the most 'words' the user wants per line, to limit");
  242. X  WriteLn;
  243. X  WriteString
  244. X  ("them below the most possible in case a sparser layout is desired.");
  245. X  WriteLn;
  246. X  WriteString
  247. X  ("If infile and/or outfile are not specified, they default to standard");
  248. X  WriteLn;
  249. X  WriteString
  250. X  ("input and output; width (ww) defaults to 77 columns to match the");
  251. X  WriteLn;
  252. X  WriteString
  253. X  ("AmigaShell window, and maxcol (mm) defaults to (width+1)/2.");
  254. X  WriteLn;
  255. X  WriteString
  256. X  ("                     /s/  Kent Paul Dolan, USENet: xanthian@well.sf.ca.us");
  257. X  WriteLn;
  258. X  WriteLn;
  259. X  RETURN;
  260. XEND usage;
  261. X
  262. XPROCEDURE getcmdline
  263. X          (VAR infile, outfile: ARRAY OF CHAR;
  264. X           VAR width: INTEGER; VAR maxcol: INTEGER): BOOLEAN;
  265. XVAR
  266. X  J, MyArgc, UnusedArgs: INTEGER;
  267. X  Unused: ARRAY [0..15] OF INTEGER;
  268. X
  269. XPROCEDURE getwidth(VAR width: INTEGER; token: ARRAY OF CHAR): BOOLEAN; 
  270. XVAR
  271. X  CharIndex, DigitValue: INTEGER;
  272. X
  273. XBEGIN
  274. X  CharIndex := 0;
  275. X(*
  276. X  WriteString(argv^[J+1]^); WriteLn;
  277. X*)
  278. X  WHILE (ORD(token[CharIndex]) <> 0) DO
  279. X    DigitValue := LocateChar("0123456789",token[CharIndex],0,9);
  280. X    IF ( DigitValue = -1 ) THEN
  281. X      WriteString("column_set: Error -- non-digit in width parameter");
  282. X      WriteLn;
  283. X      RETURN FALSE;
  284. X    ELSE
  285. X      width := 10 * width + DigitValue;
  286. X    END;
  287. X    CharIndex := CharIndex + 1;
  288. X  END;
  289. X  RETURN TRUE;
  290. XEND getwidth;
  291. X
  292. XPROCEDURE getmaxcol(VAR maxcol: INTEGER; token: ARRAY OF CHAR): BOOLEAN; 
  293. XVAR
  294. X  CharIndex, DigitValue: INTEGER;
  295. X
  296. XBEGIN
  297. X  CharIndex := 0;
  298. X(*
  299. X  WriteString(argv^[J+1]^); WriteLn;
  300. X*)
  301. X  WHILE (ORD(token[CharIndex]) <> 0) DO
  302. X    DigitValue := LocateChar("0123456789",token[CharIndex],0,9);
  303. X    IF ( DigitValue = -1 ) THEN
  304. X      WriteString("column_set: Error -- non-digit in maxcol parameter");
  305. X      WriteLn;
  306. X      RETURN FALSE;
  307. X    ELSE
  308. X      maxcol := 10 * maxcol + DigitValue;
  309. X    END;
  310. X    CharIndex := CharIndex + 1;
  311. X  END;
  312. X  RETURN TRUE;
  313. XEND getmaxcol;
  314. X
  315. XBEGIN (* getcmdline *)
  316. X  
  317. X  CopyString(infile,"");
  318. X  CopyString(outfile,"");
  319. X  width := 0;
  320. X  UnusedArgs := 0;
  321. X  
  322. X  FOR J := 0 TO 15 BY 1 DO
  323. X    Unused[J] := 0;
  324. X  END;
  325. X
  326. X  MyArgc := argc;
  327. X(*
  328. X  WriteString("MyArgc"); WriteInt(MyArgc,4); WriteLn;
  329. X*)
  330. X  (* Pull out any keyword arguments from the command line: *)
  331. X  J := 1;
  332. X  WHILE (J < MyArgc) DO
  333. X(*
  334. X    WriteString(argv^[J]^);
  335. X*)
  336. X    IF 
  337. X    (
  338. X      ( CompareStringCAP( argv^[J]^ , "-i" ) = equal )
  339. X      OR
  340. X      ( CompareStringCAP( argv^[J]^ , "FROM" ) = equal )
  341. X    ) THEN
  342. X      IF ( J + 1 >= MyArgc ) THEN
  343. X        WriteString
  344. X("column_set: Error -- '-i' or 'FROM' was last argument on command line");
  345. X        WriteLn;
  346. X    RETURN FALSE;
  347. X      ELSE
  348. X        CopyString(infile,argv^[J+1]^);
  349. X(*
  350. X        WriteString(argv^[J+1]^); WriteLn;
  351. X*)
  352. X        J := J + 2;
  353. X      END;
  354. X    ELSIF
  355. X    (
  356. X      ( CompareStringCAP( argv^[J]^ , "-o" ) = equal )
  357. X      OR
  358. X      ( CompareStringCAP( argv^[J]^ , "TO" ) = equal )
  359. X    ) THEN
  360. X      IF ( J + 1 >= MyArgc ) THEN
  361. X        WriteString
  362. X("column_set: Error -- '-o' or 'TO' was last argument on command line");
  363. X        WriteLn;
  364. X    RETURN FALSE;
  365. X      ELSE
  366. X        CopyString(outfile,argv^[J+1]^);
  367. X(*
  368. X        WriteString(argv^[J+1]^); WriteLn;
  369. X*)
  370. X        J := J + 2;
  371. X      END;
  372. X    ELSIF
  373. X    (
  374. X      ( CompareStringCAP( argv^[J]^ , "-w" ) = equal )
  375. X      OR
  376. X      ( CompareStringCAP( argv^[J]^ , "WIDTH" ) = equal )
  377. X    ) THEN
  378. X      IF ( J + 1 >= MyArgc ) THEN
  379. X        WriteString
  380. X("column_set: Error -- '-w' or 'WIDTH' was last argument on command line");
  381. X        WriteLn;
  382. X    RETURN FALSE;
  383. X      ELSE
  384. X        width := 0;
  385. X        IF ( NOT getwidth(width,argv^[J + 1]^) ) THEN
  386. X          RETURN FALSE;
  387. X        END;
  388. X    J := J + 2;
  389. X      END;
  390. X    ELSIF
  391. X    (
  392. X      ( CompareStringCAP( argv^[J]^ , "-m" ) = equal )
  393. X      OR
  394. X      ( CompareStringCAP( argv^[J]^ , "MAXCOL" ) = equal )
  395. X    ) THEN
  396. X      IF ( J + 1 >= MyArgc ) THEN
  397. X        WriteString
  398. X("column_set: Error -- '-m' or 'MAXCOL' was last argument on command line");
  399. X        WriteLn;
  400. X    RETURN FALSE;
  401. X      ELSE
  402. X        maxcol := 0;
  403. X        IF ( NOT getmaxcol(maxcol,argv^[J + 1]^) ) THEN
  404. X          RETURN FALSE;
  405. X        END;
  406. X    J := J + 2;
  407. X      END;
  408. X    ELSE
  409. X      Unused[UnusedArgs] := J;
  410. X      UnusedArgs := UnusedArgs + 1;
  411. X      J := J + 1;
  412. X    END;
  413. X  END;
  414. X
  415. X  (* Pull out any remaining positional arguments from the command line: *)
  416. X  J := 0;
  417. X  IF ( ( CompareStringCAP(infile,"") = equal ) AND (J < UnusedArgs) ) THEN
  418. X    CopyString(infile,argv^[Unused[J]]^);
  419. X    J := J + 1;
  420. X  END;
  421. X  IF ( ( CompareStringCAP(outfile,"") = equal ) AND (J < UnusedArgs) ) THEN
  422. X    CopyString(outfile,argv^[Unused[J]]^);
  423. X    J := J + 1;
  424. X  END;
  425. X  IF ( width = 0 ) AND (J < UnusedArgs) THEN
  426. X    IF ( NOT getwidth(width,argv^[Unused[J]]^) ) THEN
  427. X      RETURN FALSE;
  428. X    END;
  429. X    J := J + 1;
  430. X  END;
  431. X  IF ( width = 0) THEN
  432. X    width := DefaultWindowWidth;
  433. X  END;
  434. X  IF ( maxcol = 0 ) AND (J < UnusedArgs) THEN
  435. X    IF ( NOT getmaxcol(maxcol,argv^[Unused[J]]^) ) THEN
  436. X      RETURN FALSE;
  437. X    END;
  438. X    J := J + 1;
  439. X  END;
  440. X  IF ( maxcol = 0 ) THEN
  441. X    maxcol := (width + 1) DIV 2;
  442. X  END;
  443. X(*
  444. X  WriteLn;
  445. X*)
  446. X  RETURN TRUE;
  447. XEND getcmdline;
  448. X
  449. XPROCEDURE writebitch;
  450. XBEGIN
  451. X  WriteString("column_set: Error -- problem writing OutFile = ");
  452. X  WriteString(OutFile);
  453. X  WriteLn;
  454. X  IF (UsingStdInput) THEN
  455. X    Close(TempFile);
  456. X    Delete(TempFileName);
  457. X  END;
  458. X  IF (NOT UsingStdOutput) THEN
  459. X    CloseOutput;
  460. X  END;
  461. X  RETURN;
  462. XEND writebitch;
  463. X
  464. XBEGIN (* column_set *)
  465. X
  466. XIF ( argc > 1 ) THEN
  467. X  IF ( CompareStringCAP(argv^[1]^,"?") = equal ) THEN
  468. X    usage;
  469. X    RETURN;
  470. X  END;
  471. XEND;
  472. X
  473. XIF ( NOT getcmdline(InFile,OutFile,WindowWidth,MaxColumns) ) THEN
  474. X  WriteString("column_set: Error -- unable to correctly parse command line!");
  475. X  WriteLn;
  476. X  usage;
  477. X  RETURN;
  478. X(*
  479. XELSE
  480. X  WriteString("InFile      = "); WriteString(InFile); WriteLn;
  481. X  WriteString("OutFile     = "); WriteString(OutFile); WriteLn;
  482. X  WriteString("WindowWidth = "); WriteInt(WindowWidth,1); WriteLn;
  483. X  WriteString("MaxColumns  = "); WriteInt(MaxColumns,1); WriteLn;
  484. X*)
  485. XEND;
  486. X
  487. XIF (CompareStringCAP(InFile,"") = equal) THEN
  488. X  UsingStdInput := TRUE;
  489. XELSE
  490. X  UsingStdInput := FALSE;
  491. XEND;
  492. X
  493. XIF (CompareStringCAP(OutFile,"") = equal) THEN
  494. X  UsingStdOutput := TRUE;
  495. XELSE
  496. X  UsingStdOutput := FALSE;
  497. XEND;
  498. X
  499. XIF ( UsingStdInput) THEN
  500. X  Lookup(TempFile,TempFileName,TRUE);
  501. X  IF (TempFile.res <> done) THEN
  502. X    WriteString
  503. X      ("column_set: Error -- unable to open new work file T:column_set.temp");
  504. X    WriteLn;
  505. X    RETURN;
  506. X  END;
  507. X(*
  508. X  WriteString("column_set: taking data from standard input"); WriteLn;
  509. X*)
  510. XELSE
  511. X  OpenInputFile(InFile);
  512. X  IF (NOT Done) THEN
  513. X    WriteString("column_set: Error -- file open failed for InFile = ");
  514. X    WriteString(InFile); WriteLn;
  515. X    RETURN;
  516. X  END;
  517. X(*
  518. X  WriteString("column_set: taking data from a named file"); WriteLn;
  519. X*)
  520. XEND;
  521. X
  522. XMaxLength := 0;
  523. XThisLength := 0;
  524. XWentOK := TRUE;
  525. X
  526. XIF ( UsingStdInput ) THEN
  527. X  Terminal.Read(Ch);
  528. X  IF (eof) THEN
  529. X    WriteString
  530. X      ("column_set: Error -- standard input looks empty in counting pass");
  531. X    WentOK := FALSE;
  532. X  END;
  533. XELSE
  534. X  Read(Ch);
  535. X  IF (NOT Done) THEN
  536. X    WriteString("column_set: Error -- input file looks empty in counting pass");
  537. X    WentOK := FALSE;
  538. X  END;
  539. XEND;
  540. X
  541. XIF (NOT WentOK) THEN
  542. X  WriteLn;
  543. X  Close(TempFile);
  544. X  Delete(TempFileName);
  545. X  IF (NOT UsingStdInput) THEN
  546. X    CloseInput;
  547. X  END;
  548. X  RETURN;
  549. XEND;
  550. X
  551. XLOOP
  552. X  IF ( UsingStdInput ) THEN
  553. X    WriteChar(TempFile,Ch);
  554. X    IF (TempFile.res = notdone) THEN
  555. X      WriteString
  556. X        ("column_set: Error -- problem writing to file T:column_set.temp");
  557. X      WriteLn;
  558. X      Close(TempFile);
  559. X      Delete(TempFileName);
  560. X      RETURN;
  561. X    END;
  562. X  END;
  563. X  IF (Ch <> EOL) THEN
  564. X    ThisLength := ThisLength + 1;
  565. X  ELSE
  566. X    IF (ThisLength > MaxLength) THEN
  567. X      MaxLength := ThisLength;
  568. X    END;
  569. X    ThisLength := 0;
  570. X  END;
  571. X  IF (UsingStdInput) THEN
  572. X    Terminal.Read(Ch);
  573. X    IF (eof) THEN
  574. X      EXIT;
  575. X    END;
  576. X  ELSE
  577. X    Read(Ch);
  578. X    IF (NOT Done) THEN
  579. X      EXIT;
  580. X    END;
  581. X  END;
  582. XEND;
  583. X
  584. XIF ( UsingStdInput ) THEN
  585. X  Close(TempFile);
  586. X  IF (TempFile.res = notdone) THEN
  587. X    WriteString
  588. X      ("column_set: Error -- unable to close file T:column_set.temp after");
  589. X    WriteString(" counting pass"); WriteLn;
  590. X    RETURN;
  591. X  END;
  592. X  Lookup(TempFile,TempFileName,FALSE);
  593. X  IF (TempFile.res <> done) THEN
  594. X    WriteString
  595. X      ("column_set: Error -- unable to open file T:column_set.temp before");
  596. X    WriteString(" writing pass"); WriteLn;
  597. X    Delete(TempFileName);
  598. X    RETURN;
  599. X  END;
  600. XELSE
  601. X  CloseInput;
  602. X  OpenInputFile(InFile);
  603. X  IF (NOT Done) THEN
  604. X    WriteString("column_set: Error -- File reopen failed for InFile = ");
  605. X    WriteString(InFile); WriteLn;
  606. X    RETURN;
  607. X  END;
  608. XEND;
  609. X
  610. XIF (NOT UsingStdOutput) THEN
  611. X  OpenOutputFile(OutFile);
  612. X  IF (NOT Done) THEN
  613. X    WriteString("column_set: Error -- file open failed for OutFile = ");
  614. X    WriteString(OutFile); WriteLn;
  615. X    Close(TempFile);
  616. X    Delete(TempFileName);
  617. X    RETURN;
  618. X  END;
  619. XEND;
  620. X
  621. XNumColumns := (WindowWidth + 1) DIV (MaxLength + 1);
  622. XIF (NumColumns > MaxColumns) THEN
  623. X  NumColumns := MaxColumns;
  624. XEND;
  625. XIF (NumColumns > 1) THEN
  626. X  NumSpaces := (WindowWidth - (NumColumns * MaxLength)) DIV (NumColumns - 1);
  627. XELSE
  628. X  NumSpaces := 0;
  629. XEND;
  630. X
  631. XThisLength := 0;
  632. XThisColumn := 0;
  633. XIF ( UsingStdInput ) THEN
  634. X  ReadChar(TempFile,Ch);
  635. X  IF (TempFile.res <> done) THEN
  636. X    IF (TempFile.eof) THEN
  637. X      WriteString
  638. X("column_set: Error -- Temporary Input File Looks Empty In Writing Pass");
  639. X      WriteLn;
  640. X    ELSE
  641. X      WriteString
  642. X        ("column_set: Error -- problem reading from T:column_set.temp");
  643. X    END;
  644. X    Close(TempFile);
  645. X    Delete(TempFileName);
  646. X    IF (NOT UsingStdOutput) THEN
  647. X      CloseOutput;
  648. X    END;
  649. X    RETURN;
  650. X  END;
  651. XELSE
  652. X  Read(Ch);
  653. X  IF (NOT Done) THEN
  654. X    WriteString("column_set: Error -- Input File Looks Empty In Writing Pass");
  655. X    WriteLn;
  656. X    IF (NOT UsingStdOutput) THEN
  657. X      CloseOutput;
  658. X    END;
  659. X    CloseInput;
  660. X    RETURN;
  661. X  END;
  662. XEND;
  663. X
  664. XLOOP
  665. X  IF (Ch <> EOL) THEN
  666. X    ThisLength := ThisLength + 1;
  667. X    IF ( UsingStdOutput ) THEN
  668. X      Terminal.Write(Ch);
  669. X(*
  670. X      Module InOut "Done" documentation is buggy; omit checks after write;
  671. X      Wirth didn't specify them, and BENCHMARK doesn't support them.
  672. X      No way to check "Terminal" output result - not good when redirected
  673. X      to a disk file that might overflow!
  674. X
  675. X      WriteString("column_set: Error -- problem writing standard output");
  676. X*)
  677. X    ELSE
  678. X      Write(Ch);
  679. X(*
  680. X    Module InOut "Done" documentation is buggy; omit checks after write;
  681. X    Wirth didn't specify them, and BENCHMARK doesn't support them.
  682. X      IF (NOT Done) THEN
  683. X        writebitch;
  684. X        RETURN;
  685. X      END;
  686. X*)
  687. X    END;
  688. X  ELSE
  689. X    ThisColumn := ThisColumn + 1;
  690. X    IF (ThisColumn < NumColumns) THEN
  691. X      FOR I := ThisLength + 1 TO MaxLength + NumSpaces BY 1 DO
  692. X        IF (UsingStdOutput) THEN
  693. X          Terminal.Write(" ");
  694. X        ELSE
  695. X          Write(" ");
  696. X          IF (NOT Done) THEN
  697. X            writebitch;
  698. X            RETURN;
  699. X          END;
  700. X        END;
  701. X      END;
  702. X    ELSE
  703. X      IF (UsingStdOutput) THEN
  704. X        Terminal.WriteLn;
  705. X      ELSE
  706. X        Write(EOL);
  707. X(*
  708. X    Module InOut "Done" documentation is buggy; omit checks after write;
  709. X    Wirth didn't specify them, and BENCHMARK doesn't support them.
  710. X
  711. X        IF (NOT Done) THEN
  712. X          writebitch;
  713. X          RETURN;
  714. X        END;
  715. X*)
  716. X      END;
  717. X      ThisColumn := 0;
  718. X    END;
  719. X    ThisLength := 0;
  720. X  END;
  721. X  IF ( UsingStdInput ) THEN
  722. X    ReadChar(TempFile,Ch);
  723. X    IF (TempFile.res <> done) THEN
  724. X      IF (TempFile.eof) THEN
  725. X        EXIT;
  726. X      ELSE
  727. X        WriteString
  728. X          ("column_set: Error -- problem reading from T:column_set.temp");
  729. X        Close(TempFile);
  730. X        Delete(TempFileName);
  731. X        IF (NOT UsingStdOutput) THEN
  732. X          CloseOutput;
  733. X        END;
  734. X        RETURN;
  735. X      END;
  736. X    END;
  737. X  ELSE
  738. X    Read(Ch);
  739. X    IF (NOT Done) THEN (* Unable to differentiate read error from eof *)
  740. X      EXIT;
  741. X    END;
  742. X  END;
  743. XEND;
  744. X
  745. XIF (ThisColumn <> 0) THEN
  746. X  IF (UsingStdOutput) THEN
  747. X    Terminal.WriteLn;
  748. X  ELSE
  749. X    Write(EOL);
  750. X(*
  751. X    Module InOut "Done" documentation is buggy; omit checks after write;
  752. X    Wirth didn't specify them, and BENCHMARK doesn't support them.
  753. X    IF (NOT Done) THEN
  754. X      writebitch;
  755. X      RETURN;
  756. X    END;
  757. X*)
  758. X  END;
  759. XEND;
  760. X
  761. XIF ( UsingStdInput ) THEN
  762. X  Close(TempFile);
  763. X  Delete(TempFileName);
  764. XELSE
  765. X  CloseInput;
  766. XEND;
  767. X
  768. XIF (NOT UsingStdOutput) THEN
  769. X  CloseOutput;
  770. XEND;
  771. X
  772. XEND column_set.
  773. SHAR_EOF
  774. echo "extracting column_set.doc"
  775. sed 's/^X//' << \SHAR_EOF > column_set.doc
  776. XDocumentation for Modula-2 program column_set, by Kent Paul Dolan.
  777. X
  778. XThe purpose of column _set is to act as a text filter, accepting a file
  779. Xwith one "word" per line (the original was the output of the AmigaDOS
  780. Xcommand 'list lformat="%S"', after being sorted) as input, and producing a
  781. Xfile with these "words" layed out in the same order in even columns, as
  782. Xmany as will fit across the output screen or page with at least one space
  783. Xbetween columns.
  784. X
  785. XThe default input is the standard input, the default output is the standard
  786. Xoutput, the default output file line width is 77 character positions to
  787. Xmatch the AmigaShell window default width, and the default maximum allowed
  788. Xnumber of "words" or layout columns per line (maxcol) is (width+1)/2 to
  789. Xallow for laying out single character "words" with one space after all but
  790. Xthe last one on a line. 
  791. X
  792. XOptionally, command line parameters or redirection can name the input and
  793. Xoutput files, and command line parameters can modify the width and maxcol
  794. Xparameters.  The parameters are positional, in order: infile, outfile, width,
  795. Xmaxcol, with missing parameters defaulted, but AmigaDOS style keywords can
  796. Xoverride the positional nature of the parameters, and optionally Unix style
  797. X"-flag" type keywords can do the same.  Also, the command line is scanned
  798. Xtwice, first to pull off keywords and their associated parameters, then to
  799. Xpull off missing positional parameters in order from any left over command
  800. Xline tokens, so some grotesque mixes of parameter styles work as hoped.
  801. X
  802. XExcept for errors writing output files, which sadly are not checked for in
  803. XModula-2's standard i/o module, "all" identified error conditions are
  804. Xcaught and reported to the user.
  805. X
  806. XDoing the column layout requires two passes over the input data, one to
  807. Xfind the largest "word" in the input, which allows column number and
  808. Xspacing to be calculated, and one to copy the "words" to the output.  Since
  809. Xstandard input may come from the keyboard, and so be unrewindable, in the
  810. Xcase that input is from standard input, a copy of the input is written to a
  811. Xtemporary file in "T:column_set.temp" for use in the second pass, then
  812. Xdeleted when the filter is ready to exit.  (On a Unix system, this should be
  813. Xchanged in the source code to "/tmp/column_set.temp", but I cannot do it on
  814. Xmy Amiga because I don't have a conditional compilation prepass available.)
  815. X
  816. XProgram usage may be seen by typing in "column_set ?", and is reported when
  817. Xa command line error is detected as well.  Without going into all the
  818. Xpossibilities of defaults, of mixing positional with keyword parameters,
  819. Xand of mixing Unix with AmigaDOS keywords; the usage, completely default,
  820. Xredirected, positional, AmigaDOS keyword, and Unix keyword formats,
  821. Xrespectively, look like this, where "infile" and "outfile" are file path
  822. Xnames, "ww" and "mm" are integers, and the spaces between keyword tokens
  823. Xand parameter tokens are mandatory:
  824. X
  825. X    column_set ?
  826. X    column_set
  827. X    column_set < infile > outfile [{WIDTH | -w} ww] [{MAXCOL | -m} mm]
  828. X    column_set infile outfile ww mm
  829. X    column_set FROM infile TO outfile WIDTH ww MAXCOL mm
  830. X    column_set -i infile -o outfile -w ww -m mm
  831. X
  832. Xwhile, just for example, this will also work:
  833. X
  834. X    column_set MaXCoL mm -o outfile widTH ww infile
  835. X
  836. Xwhich is arrant nonsense, but did keep me up until dawn finding ways it
  837. Xwouldn't work and fixing them.
  838. X
  839. XAs expected, the program doesn't see the redirection commands in the
  840. Xversion of the command line passed to it in the environment, so if you
  841. Xredirect anything, keyword all the other parameters (really, the
  842. Xfunctionality is less strict than that, but that is surely safe), or you
  843. Xmight get positional parameter tokens attached to the wrong parameters.
  844. X
  845. XWhen the command line handling and file handling code are stripped away,
  846. Xthe remaining algorithm is simplicity itself: on the first pass through the
  847. Xinput data, find the length of the longest input "word"; when done with the
  848. Xfirst pass, determine how many such words will fit on a line with at least
  849. Xone space between words, and how many spaces can be put between that many
  850. Xwords without overflowing the line; on the second pass, copy words from
  851. Xinput to output, following each but the last on each line with that number
  852. Xof spaces, and the last on each line with a newline, until all the words
  853. Xare copied.  A special case puts a newline rather than spaces after the
  854. Xlast word of the input, if it would not normally be the last word on a
  855. Xline.
  856. X
  857. XThe program is copyrighted, but this is no big deal; steal what you want,
  858. Xjust spell my name right in the credits, and don't take a profit on the
  859. Xwhole thing (snips and snatches are OK) without cutting me in on the swag.
  860. XThanks!
  861. X
  862. XOh, yeah, to be fair, AmigaDOS, Amiga, and probably AmigaShell are trademarks
  863. Xbelonging to Commodore, while Unix belongs to AT&T.
  864. X
  865. XKent Paul Dolan, 26 October 1989, Mountain View, California.
  866. X
  867. XExample of use:
  868. X
  869. XFrom the commands run in the Amiga directory where this code was developed
  870. X
  871. X   list > t:junk1 lformat="%S"
  872. X   sort t:junk1 t:junk2
  873. X   column_set < t:junk2 > t:junk3
  874. X
  875. Xat the end, t:junk3 looked like this:
  876. X
  877. Xcolumn_set                  column_set.doc              column_set.MOD
  878. Xcolumn_set.OBM              column_set.RFM              column_set.uu
  879. Xcolumn_set2.MOD             column_set3.MOD             jvert
  880. Xmycopy1.MOD                 mycopy2.MOD                 mycopy3.MOD
  881. XScheduleBasics.DEF          ScheduleBasics.MOD          SchedulePerson.DEF
  882. XSchedulePerson.MOD          ScheduleTask.DEF            ScheduleTask.MOD
  883. XSchedule_V0.01.MOD          TimeSliceHandler.DEF        TimeSliceHandler.MOD
  884. Xtvert                       
  885. X
  886. Xwhich allows a directory half again as long to fit on a single screen, by
  887. Xlaying it out in three columns instead of two.  Of such small increments is
  888. Xhappiness constructed.   Kent.
  889. X
  890. SHAR_EOF
  891. echo "extracting column_set.uu"
  892. sed 's/^X//' << \SHAR_EOF > column_set.uu
  893. X
  894. Xbegin 644 column_set
  895. XM```#\P`````````)``````````@````,```'B````/X```+1```!,````&(`&
  896. XM``%K````CP```$\```/I````#$ZY````0DZY````"$ZY````!$ZY````"$ZY[
  897. XM````"$ZY````NDZY````!$[Y```,9````^P````!`````@````(````!`````
  898. XM!P````@````!````"`````X````!````!````!0````!````!0```!H````!@
  899. XM`````P```"`````!````!@```"8````!`````0```"P````````#\@```^D`?
  900. XM``>(````````````````````````````````````````````````````````/
  901. XM`````````````````````````````````````````````````````````````
  902. XM`````````````````````````````````````````````````````````````
  903. XM`````````````````````````````````````````````````````````````
  904. XM`````````````````````````````````````````````````````````````
  905. XM`````````````````````````````````````````````````````````````
  906. XM`````````````````````````````````````````````````````````````
  907. XM`````````````````````````````````````````````````````````````
  908. XM`````````````````````````````````````````````````````````````
  909. XM`````````````````````````````````````````````````````````````
  910. XM`````````````````````````````````````````````````````````````
  911. XM`````````````````````````````````````````````````````````````
  912. XM````````````````````````````````````````````5#IC;VQU;6Y?<V5T'
  913. XM+G1E;7``57-A9V4Z(&-O;'5M;E]S970@6T923TT@?"`M:5T@:6YF:6QE(%M4P
  914. XM3R!\("UO72!O=71F:6QE(%M724142"!\("UW72!W=P`@("`@("`@6TU!6$-/5
  915. XM3"!\("UM72!M;5T`("`@;W(Z(&-O;'5M;E]S970@/"!I;F9I;&4@/B!O=71F9
  916. XM:6QE(%M[5TE$5$@@?"`M=WT@=W==(%M[34%80T],('P@+6U](&UM70`@("!OK
  917. XM<CH@8V]L=6UN7W-E="!;*%=)1%1(('P@+7=]('=W72!;>TU!6$-/3"!\("UM`
  918. XM?2!M;5T@:6YF:6QE(&]U=&9I;&4`;W(@;W1H97(@;&EK96QY(&-O;6)I;F%T]
  919. XM:6]N<SL@:6YF:6QE+"!O=71F:6QE+"!W=RP@86YD(&UM(&%R92!P;W-I=&EO!
  920. XM;F%L`'=I=&AO=70@:V5Y=V]R9',L('!O<VET:6]N(&EN9&5P96YD96YT('=I6
  921. XM=&@@:V5Y=V]R9',L(&%N9"!M:7AE<R!A<F4@<F5A9`!B>2!T<GEI;F<@=&\@(
  922. XM<&EC:R!O9F8@9FER<W0@=&AE(&ME>7=O<F0@<&%R;6%M971E<G,L('1H96X@L
  923. XM=&AE(&UI<W-I;F<`<&]S:71I;VYA;"!P87)A;65T97)S(&EN(&]R9&5R(&9R<
  924. XM;VT@=VAA="!I<R!L969T(&]V97(N`"=);F9I;&4G(&ES('1H92!I;G!U="!F9
  925. XM:6QE+"!E>'!E8W1E9"!T;R!C;VYT86EN(&]N92`G=V]R9"<@<&5R(&QI;F4[=
  926. XM`"=O=71F:6QE)R!I<R!T:&4@;W5T<'5T(&9I;&4L('=H:6-H('=I;&P@8V]N+
  927. XM=&%I;B!T:&4@<V%M92`G=V]R9',G(&EN('1H90!S86UE(&]R9&5R(&QA:60@$
  928. XM;W5T(&EN(&%S(&UA;GD@979E;B!C;VQU;6YS(&%S('=I;&P@9FET(&%C<F]SN
  929. XM<R!T:&4`<&%G92!O<B!S8W)E96X[("=W=R<@:7,@=&AE('=I9'1H(&]F('1HW
  930. XM92!S8W)E96X@;W(@<&%G92!I;B!C:&%R86-T97(`<&]S:71I;VYS.R`G;6TGR
  931. XM(&ES('1H92!M;W-T("=W;W)D<R<@=&AE('5S97(@=V%N=',@<&5R(&QI;F4L%
  932. XM('1O(&QI;6ET`'1H96T@8F5L;W<@=&AE(&UO<W0@<&]S<VEB;&4@:6X@8V%S\
  933. XM92!A('-P87)S97(@;&%Y;W5T(&ES(&1E<VER960N`$EF(&EN9FEL92!A;F0OV
  934. XM;W(@;W5T9FEL92!A<F4@;F]T('-P96-I9FEE9"P@=&AE>2!D969A=6QT('1O<
  935. XM('-T86YD87)D`&EN<'5T(&%N9"!O=71P=70[('=I9'1H("AW=RD@9&5F875LP
  936. XM=',@=&\@-S<@8V]L=6UN<R!T;R!M871C:"!T:&4`06UI9V%3:&5L;"!W:6YD3
  937. XM;W<L(&%N9"!M87AC;VP@*&UM*2!D969A=6QT<R!T;R`H=VED=&@K,2DO,BX`+
  938. XM("`@("`@("`@("`@("`@("`@("`@+W,O("!+96YT(%!A=6P@1&]L86XL(%53W
  939. XM14YE=#H@>&%N=&AI86Y`=V5L;"YS9BYC82YU<P`P,3(S-#4V-S@Y`&-O;'5M1
  940. XM;E]S970Z($5R<F]R("TM(&YO;BUD:6=I="!I;B!W:61T:"!P87)A;65T97(`X
  941. XM,#$R,S0U-C<X.0!C;VQU;6Y?<V5T.B!%<G)O<B`M+2!N;VXM9&EG:70@:6X@D
  942. XM;6%X8V]L('!A<F%M971E<@``````+6D`1E)/30!C;VQU;6Y?<V5T.B!%<G)O:
  943. XM<B`M+2`G+6DG(&]R("=&4D]-)R!W87,@;&%S="!A<F=U;65N="!O;B!C;VUM>
  944. XM86YD(&QI;F4`+6\`5$\`8V]L=6UN7W-E=#H@17)R;W(@+2T@)RUO)R!O<B`GC
  945. XM5$\G('=A<R!L87-T(&%R9W5M96YT(&]N(&-O;6UA;F0@;&EN90`M=P!72414L
  946. XM2`!C;VQU;6Y?<V5T.B!%<G)O<B`M+2`G+7<G(&]R("=724142"<@=V%S(&QAX
  947. XM<W0@87)G=6UE;G0@;VX@8V]M;6%N9"!L:6YE`"UM`$U!6$-/3`!C;VQU;6Y?Y
  948. XM<V5T.B!%<G)O<B`M+2`G+6TG(&]R("=-05A#3TPG('=A<R!L87-T(&%R9W5M@
  949. XM96YT(&]N(&-O;6UA;F0@;&EN90``````8V]L=6UN7W-E=#H@17)R;W(@+2T@"
  950. XM<')O8FQE;2!W<FET:6YG($]U=$9I;&4@/2``/P!C;VQU;6Y?<V5T.B!%<G)O4
  951. XM<B`M+2!U;F%B;&4@=&\@8V]R<F5C=&QY('!A<G-E(&-O;6UA;F0@;&EN92$`@
  952. XM`````&-O;'5M;E]S970Z($5R<F]R("TM('5N86)L92!T;R!O<&5N(&YE=R!W$
  953. XM;W)K(&9I;&4@5#IC;VQU;6Y?<V5T+G1E;7``8V]L=6UN7W-E=#H@17)R;W(@4
  954. XM+2T@9FEL92!O<&5N(&9A:6QE9"!F;W(@26Y&:6QE(#T@`&-O;'5M;E]S970Z?
  955. XM($5R<F]R("TM('-T86YD87)D(&EN<'5T(&QO;VMS(&5M<'1Y(&EN(&-O=6YT\
  956. XM:6YG('!A<W,`8V]L=6UN7W-E=#H@17)R;W(@+2T@:6YP=70@9FEL92!L;V]K1
  957. XM<R!E;7!T>2!I;B!C;W5N=&EN9R!P87-S`&-O;'5M;E]S970Z($5R<F]R("TMN
  958. XM('!R;V)L96T@=W)I=&EN9R!T;R!F:6QE(%0Z8V]L=6UN7W-E="YT96UP`&-O5
  959. XM;'5M;E]S970Z($5R<F]R("TM('5N86)L92!T;R!C;&]S92!F:6QE(%0Z8V]L!
  960. XM=6UN7W-E="YT96UP(&%F=&5R`"!C;W5N=&EN9R!P87-S`&-O;'5M;E]S970ZB
  961. XM($5R<F]R("TM('5N86)L92!T;R!O<&5N(&9I;&4@5#IC;VQU;6Y?<V5T+G1E^
  962. XM;7`@8F5F;W)E`"!W<FET:6YG('!A<W,`8V]L=6UN7W-E=#H@17)R;W(@+2T@B
  963. XM1FEL92!R96]P96X@9F%I;&5D(&9O<B!);D9I;&4@/2``8V]L=6UN7W-E=#H@\
  964. XM17)R;W(@+2T@9FEL92!O<&5N(&9A:6QE9"!F;W(@3W5T1FEL92`](`!C;VQU*
  965. XM;6Y?<V5T.B!%<G)O<B`M+2!496UP;W)A<GD@26YP=70@1FEL92!,;V]K<R!%D
  966. XM;7!T>2!);B!7<FET:6YG(%!A<W,`8V]L=6UN7W-E=#H@17)R;W(@+2T@<')OD
  967. XM8FQE;2!R96%D:6YG(&9R;VT@5#IC;VQU;6Y?<V5T+G1E;7``8V]L=6UN7W-E^
  968. XM=#H@17)R;W(@+2T@26YP=70@1FEL92!,;V]K<R!%;7!T>2!);B!7<FET:6YG4
  969. XM(%!A<W,`8V]L=6UN7W-E=#H@17)R;W(@+2T@<')O8FQE;2!R96%D:6YG(&9R1
  970. XM;VT@5#IC;VQU;6Y?<V5T+G1E;7`````".DY5``!@``G,3E4``$ZY```(+C\\6
  971. XM`$9(>0```DQ.N0``"%I.N0``""X_/``82'D```*33KD```A:3KD```@N/SP`%
  972. XM24AY```"K$ZY```(6DZY```(+C\\`$5(>0```O9.N0``"%I.N0``""X_/`!(`
  973. XM2'D```,\3KD```A:3KD```@N/SP`2$AY```#A4ZY```(6DZY```(+C\\`$5(@
  974. XM>0```\Y.N0``"%I.N0``""X_/``V2'D```043KD```A:3KD```@N/SP`1$AY@
  975. XM```$2TZY```(6DZY```(+C\\`$A(>0``!)!.N0``"%I.N0``""X_/`!"2'D`Q
  976. XM``393KD```A:3KD```@N/SP`1$AY```%'$ZY```(6DZY```(+C\\`$5(>0``+
  977. XM!6%.N0``"%I.N0``""X_/`!!2'D```6G3KD```A:3KD```@N/SP`1$AY```%@
  978. XMZ4ZY```(6DZY```(+C\\`$!(>0``!BY.N0``"%I.N0``""X_/``[2'D```9O1
  979. XM3KD```A:3KD```@N/SP`24AY```&JTZY```(6DZY```(+DZY```(+F````).O
  980. XM74YU3E7_VF```<Y.5?_\-"T`$%)"1;Q__@@"``!G`E)"GL(F;0`,*T\`#"1/K
  981. XM4T(4VU'*__Q";?_^-"W__D6M`!`F;0`,>``8,R``2D1G``"*/SP`"DAY```&S
  982. XM]30M__Y%K0`0)FT`#!\S(`!"9S\\``E.N0``!4X[0/_\#&W____\9@``(C\\8
  983. XM`#%(>0``!P!.N0``"%I.N0``""YP`&```$A@```F)FT`$C03Q?P`"C@"2,2TN
  984. XMA&<&`#P``DYVU&W__$YV)FT`$C:"-"W__E)"3G8[0O_^8`#_8G`!8```"G`".
  985. XM3KD```!&3ET@7T_O``Y.T$Y5__PT+0`04D)%O'_^"`(``&<"4D*>PB9M``PKS
  986. XM3P`,)$]30A3;4<K__$)M__XT+?_^1:T`$"9M``QX`!@S(`!*1&<``(H_/``*Z
  987. XM2'D```<R-"W__D6M`!`F;0`,'S,@`$)G/SP`"4ZY```%3CM`__P,;?____QF`
  988. XM```B/SP`,DAY```'/4ZY```(6DZY```(+G``8```2&```"8F;0`2-!/%_``*/
  989. XM.`)(Q+2$9P8`/``"3G;4;?_\3G8F;0`2-H(T+?_^4D).=CM"__Y@`/]B<`%@,
  990. XM```*<`).N0```$9.72!?3^\`#D[0/RT`&B\M`!9"9TAY```'<$ZY```!B#\MR
  991. XM`!0O+0`00F=(>0``!W).N0```8@F;0`,0E-";?_Z0FW__@QM``___FX``!HT\
  992. XM+?_^1;P`#^-"1^W_VD)S(`!2;?_^:-XT.0````Q%O'__.T+__#M\``'__C0M)
  993. XM__ZT;?_\;``#BC0M__Y%O`#_Y4(F>0````@_/`#_+S,@`#\\``)(>0``!W1.!
  994. XMN0```084``P"``%G```T-"W__D6\`/_E0B9Y````"#\\`/\O,R``/SP`!$AYF
  995. XM```'=TZY```!!A0`#`(``68``&PT+?_^4D).=K1M__QM```B/SP`14AY```'J
  996. XM?$ZY```(6DZY```(+G``8``$UF```#@_+0`:+RT`%C0M__Y20DYV1;P`_^5"Y
  997. XM)GD````(/SP`_R\S(`!.N0```8@T+?_^5$).=CM"__Y@``*X-"W__D6\`/_E"
  998. XM0B9Y````"#\\`/\O,R``/SP``DAY```'PDZY```!!A0`#`(``6<``#0T+?_^6
  999. XM1;P`_^5")GD````(/SP`_R\S(``_/``"2'D```?%3KD```$&%``,`@`!9@``K
  1000. XM;#0M__Y20DYVM&W__&T``"(_/`!#2'D```?(3KD```A:3KD```@N<`!@``0(=
  1001. XM8```.#\M`!0O+0`0-"W__E)"3G9%O`#_Y4(F>0````@_/`#_+S,@`$ZY```!,
  1002. XMB#0M__Y40DYV.T+__F```>HT+?_^1;P`_^5")GD````(/SP`_R\S(``_/``"J
  1003. XM2'D```@,3KD```$&%``,`@`!9P``-#0M__Y%O`#_Y4(F>0````@_/`#_+S,@)
  1004. XM`#\\``5(>0``"`].N0```084``P"``%F``!\-"W__E)"3G:T;?_\;0``(C\\'
  1005. XM`$9(>0``"!5.N0``"%I.N0``""YP`&```SI@``!()FT`#$)3+RT`##0M__Y2+
  1006. XM0DYV1;P`_^5")GD````(/SP`_R\S(`!(56$`^UX4`$H"9@``"'``8``"_#0MD
  1007. XM__Y40DYV.T+__F```0PT+?_^1;P`_^5")GD````(/SP`_R\S(``_/``"2'D`D
  1008. XM``A<3KD```$&%``,`@`!9P``-#0M__Y%O`#_Y4(F>0````@_/`#_+S,@`#\\3
  1009. XM``9(>0``"%].N0```084``P"``%F``!\-"W__E)"3G:T;?_\;0``(C\\`$=(L
  1010. XM>0``"&9.N0``"%I.N0``""YP`&```EQ@``!()FT`"$)3+RT`"#0M__Y20DYVM
  1011. XM1;P`_^5")GD````(/SP`_R\S(`!(56$`^V84`$H"9@``"'``8``"'C0M__Y49
  1012. XM0DYV.T+__F```"XT+?_Z1;P`#^-"1^W_VC>M__X@`#0M__I20DYV.T+_^C0MT
  1013. XM__Y20DYV.T+__F``_&Y";?_^/RT`&B\M`!9"9TAY```(KDZY```!!A0`#`(`-
  1014. XM`68``$XT+?_^M&W_^FP``$(_+0`:+RT`%C0M__Y%O``/XT)'[?_:.#,@`$F\#
  1015. XM`/_E1"9Y````"#\\`/\O,T``3KD```&(-"W__E)"3G8[0O_^/RT`%"\M`!!"9
  1016. XM9TAY```(L$ZY```!!A0`#`(``68``$XT+?_^M&W_^FP``$(_+0`4+RT`$#0MX
  1017. XM__Y%O``/XT)'[?_:.#,@`$F\`/_E1"9Y````"#\\`/\O,T``3KD```&(-"W_J
  1018. XM_E)"3G8[0O_^)FT`#$I39@``6#0M__ZT;?_Z;```3"\M``PT+?_^1;P`#^-"U
  1019. XM1^W_VC@S(`!)O`#_Y40F>0````@_/`#_+S-``$A580#Y$!0`2@)F```(<`!@M
  1020. XM``"N-"W__E)"3G8[0O_^)FT`#$I39@``"B9M``PVO`!-)FT`"$I39@``6#0M_
  1021. XM__ZT;?_Z;```3"\M``@T+?_^1;P`#^-"1^W_VC@S(`!)O`#_Y40F>0````@_Q
  1022. XM/`#_+S-``$A580#YA!0`2@)F```(<`!@```\-"W__E)"3G8[0O_^)FT`"$I3:
  1023. XM9@``&"9M``PT$U)"3G9(PH7\``(F;0`(-H)P`6````IP`DZY````1DY=(%]/O
  1024. XM[P`43M!.50``/SP`+TAY```(LDZY```(6C\\`/](>0```#A.N0``"%I.N0``U
  1025. XM""Y*.0````-G```>2'D````$3KD```%0/SP`$4AY```".DZY```!E$HY````&
  1026. XM`F8```A.N0``!`A@```"3EU.=0QY``$````,8P``-"1Y````""9J``0_/`#_O
  1027. XM2%,_/``!2'D```CB3KD```$&%``,`@`!9@``"F$`]?Y@``>H/SP`_TAY```!"
  1028. XM.#\\`/](>0```#A(>0```#1(>0```#!A`/=Z%`!*`F8``"`_/``\2'D```CDM
  1029. XM3KD```A:3KD```@N80#UM&``!UX_/`#_2'D```$X0F=(>0``"2%.N0```084?
  1030. XM``P"``%F```.$_P``0````-@```(0CD````#/SP`_TAY````.$)G2'D```DC%
  1031. XM3KD```$&%``,`@`!9@``#A/\``$````"8```"$(Y`````DHY`````V<``$1(5
  1032. XM>0````0_/``12'D```(Z'SP``4ZY```!L$HY````!&<``!P_/`!#2'D```DE1
  1033. XM3KD```A:3KD```@N8``&KF```$8_/`#_2'D```$X3KD```-J2CD```"?9@``0
  1034. XM+#\\`#-(>0``"6E.N0``"%H_/`#_2'D```$X3KD```A:3KD```@N8``&9D)Y7
  1035. XM````-D)Y````,A/\``$````!2CD````#9P``,DAY```".4ZY````$$HY````I
  1036. XM`V<``!@_/`!`2'D```F=3KD```A:0CD````!8```+DAY```".4ZY```$+$HY-
  1037. XM````GV8``!@_/``\2'D```G>3KD```A:0CD````!2CD````!9@``.$ZY```(2
  1038. XM+DAY````!$ZY```!4#\\`!%(>0```CI.N0```91*.0````-F```(3KD```/D2
  1039. XM8``%K$HY`````V<``%9(>0````0?.0```CE.N0``!%`,.0`!````!&8``#@_N
  1040. XM/``^2'D```H;3KD```A:3KD```@N2'D````$3KD```%0/SP`$4AY```".DZYS
  1041. XM```!E&``!4X,.0`*```".6<``!8T.0```#)20DYV,\(````R8```(C0Y````<
  1042. XM,K1Y````-F\```PS^0```#(````V0GD````R2CD````#9P``($AY```".4ZYA
  1043. XM````$$HY`````V<```9@```D8```'$AY```".4ZY```$+$HY````GV8```9@D
  1044. XM```&8`#_'DHY`````V<``*1(>0````1.N0```5`,.0`!````!&8``"P_/`!!)
  1045. XM2'D```I:3KD```A:/SP`#DAY```*G$ZY```(6DZY```(+F``!'Q(>0````0_(
  1046. XM/``12'D```(Z0B=.N0```;!*.0````1G```\/SP`04AY```*JTZY```(6C\\K
  1047. XM``U(>0``"NU.N0``"%I.N0``""X_/``12'D```(Z3KD```&48``$(&```$Q..
  1048. XMN0```^0_/`#_2'D```$X3KD```-J2CD```"?9@``+#\\`#5(>0``"OM.N0``Y
  1049. XM"%H_/`#_2'D```$X3KD```A:3KD```@N8``#TDHY`````F8``&(_/`#_2'D`Y
  1050. XM```X3KD```.F2CD```"?9@``2#\\`#1(>0``"S%.N0``"%H_/`#_2'D````X`
  1051. XM3KD```A:3KD```@N2'D````$3KD```%0/SP`$4AY```".DZY```!E&```V@TG
  1052. XM.0```#120DYV.#D````V4D1.=DC"A<0SP@```"XT.0```"ZT>0```#!O```,O
  1053. XM,_D````P````+@QY``$````N;P``/C0Y````+L7Y````-C@"2,2TA&<&`#P`A
  1054. XM`DYV.#D````TF$).=C0Y````+E-"3G9(Q(G",\0````J8```"$)Y````*D)Y]
  1055. XM````,D)Y````+$HY`````V<``(9(>0````1(>0```CE.N0```^1*.0````1GI
  1056. XM``!F2CD````%9P``'#\\`$5(>0``"V9.N0``"%I.N0``""Y@```2/SP`.TAYR
  1057. XM```+K$ZY```(6DAY````!$ZY```!4#\\`!%(>0```CI.N0```91*.0````)F-
  1058. XM```(3KD```0(8``"3&```$A(>0```CE.N0``!"Q*.0```)]F```R/SP`.TAY5
  1059. XM```+Z$ZY```(6DZY```(+DHY`````F8```A.N0``!`A.N0```^1@``("##D`V
  1060. XM"@```CEG```\-#D````R4D).=C/"````,DHY`````F<``!(?.0```CE.N0``>
  1061. XM`/Y@```.'SD```(Y3KD```?*8```NC0Y````+%)"3G8SP@```"PT.0```"RT0
  1062. XM>0```"YL``!P-#D````R4D).=C/"````*#0Y````-M1Y````*DYV/P(T.0``C
  1063. XM`"BT5VX``#Y*.0````)G```0'SP`($ZY````_F```!X?/``@3KD```?*2CD`O
  1064. XM``"?9@``"F$`^/1@``$\4GD````H:+A4CV```"9*.0````)G```,3KD```$D9
  1065. XM8```#!\\``I.N0``!\I">0```"Q">0```#)*.0````-G``!T2'D````$2'D`D
  1066. XM``(Y3KD```/D2CD````$9P``5$HY````!6<```I@``!H8```0C\\`#M(>0``%
  1067. XM#"1.N0``"%I(>0````1.N0```5`_/``12'D```(Z3KD```&42CD````"9@``&
  1068. XM"$ZY```$"&```(Q@```<2'D```(Y3KD```0L2CD```"?9@``!F````9@`/YJR
  1069. XM2GD````L9P``($HY`````F<```Q.N0```21@```,'SP`"DZY```'RDHY````&
  1070. XM`V<``")(>0````1.N0```5`_/``12'D```(Z3KD```&48```"$ZY```#Y$HYG
  1071. XM`````F8```A.N0``!`A.74YU``````/L````N`````$``!X,```=]@``'>8`9
  1072. XM`!W<```=O@``';0``!V6```=?@``'7(``!UB```=5@``'4```!TV```=*@``K
  1073. XM'20``!T:```=%```'0X``!SP```<X@``'*X``!RB```<F```')(``!R,```<,
  1074. XM@@``''@``!QR```<;```'&(``!Q2```<0@``'#@``!PR```<*```'!X``!P"T
  1075. XM```;\```&]8``!N^```;L@``&Z(``!N6```;?```&VX``!MD```;6```&U(`/
  1076. XM`!M(```;0@``&SP``!LV```;+```&QX``!L4```;````&OH``!KP```:Z```2
  1077. XM&N0``!K:```:U```&LX``!K````:M@``&J8``!J6```:A```&G0``!I:```:<
  1078. XM3```&C8``!HF```:#```&>X``!G8```9R```&;H``!FL```9H@``&8P``!E\H
  1079. XM```9;@``&6```!E6```9.```&1H``!D0```9"@``&00``!D````8]@``&/``+
  1080. XM`!CF```8W```&-(``!C````8L```&)X``!B0```8@@``&'P``!AR```87@``(
  1081. XM&%(``!A"```8,@``&"P``!@@```8!@``%_P``!?P```7U@``%\P``!?&```7&
  1082. XMO@``%[@``!>B```7D@``%W@``!=:```73```%SP``!<R```7*```%R(``!<85
  1083. XM```7````%O@``!;N```6Y```%LP``!;$```6I@``%I```!:*```6A```%GH`+
  1084. XM`!98```6(```%A0``!8$```5^@``%>@``!78```49```$_@``!-4```3*@``(
  1085. XM$O@``!)V```23```$AH``!&H```1?@``$4P``!#:```0L```$'X``!`&```/>
  1086. XM\```#WX```]*```.F```#F0```WR```-W```#<8```VP```-F@``#80```UN9
  1087. XM```-6```#4(```TL```-%@``#0````SJ```,U```#+X```RH```,D@``#'P`7
  1088. XM``Q@````%@````(``!9$```6.@``%6H``!3X```4I@``%#H``!.(```3&```'
  1089. XM$N8``!*J```2.@``$@@``!':```1;```$3H``!$,```0G@``$&P``!!"```.T
  1090. XM\```#]8``!7`````;P````,``!VB```<T```&^(``!IF```:&```&40``!@2]
  1091. XM```7A```#'(```R"```,B```#)@```R>```,K@``#+0```S$```,R@``#-H`/
  1092. XM``S@```,\```#/8```T&```-#```#1P```TB```-,@``#3@```U(```-3@``B
  1093. XM#5X```UD```-=```#7H```V*```-D```#:````VF```-M@``#;P```W,```-J
  1094. XMT@``#>(```WH```-^```#?X```X$```.G@``#J0```^$```/B@``$.```!#F(
  1095. XM```1K@``$;0``!)\```2@@``$UH``!-@```5W@``%>X``!7T```6*@``%JP`'
  1096. XM`!:R```78```%V8``!=^```7F```%Z@``!>N```7]@``&`P``!@F```8/```'
  1097. XM&&@``!BD```8J@``&3X``!F"```9D@``&9@``!G.```9W@``&>0``!H"```:=
  1098. XM$@``&BP``!H\```:0@``&F```!IZ```:B@``&I```!N"```;B```&YP``!O(`
  1099. XM```;W```&_8``!O\```<#```'!(``!Q8```<R@``'0@``!U<```=B```'9P`+
  1100. XM`!W6```>!@``'A8````5````!```%@H``!8:```71@``&$@``!A8```8B```!
  1101. XM&+8``!C&```99@``&;0``!GT```:G```&JP``!M>```;J```&[@``!TP```=Z
  1102. XM:```'7@``!WL```=_`````@````%```9)@``%^(``!?<```9(```'$@``!R\,
  1103. XM```<^@``'<@````5````!@``#H````]F```/]@``$`P``!"$```0M@``$1H`_
  1104. XM`!%2```1A```$>@``!(@```24@``$OX``!,P```3_@``%$@``!1J```4M```-
  1105. XM%EX``!;2```7!@````````/R```#Z0```/X`````````````````````````8
  1106. XM`````````````````````````````````````````````````````````````
  1107. XM`#Y@``%28``"]DCG,``T`<3`)@%(0\;`2$-"0]2#2$#`P4A`0D#0@DS?``Q.J
  1108. XM=2\")`$B``R"``#__VX</$%"04A!@L(@`4A!,`Z`PC(`0D!(0,%!)!].=2`!?
  1109. XM0D!(0$A!0D$L0G0/TH'1@+W`;@20CE)!4<K_\L%!)!].=3\#2'H`%B\")`%;J
  1110. XMPVH"1((B`&JD1(%&`V">2@-G`D2`-A].=2`O``@B+P`$+'K_2"]7``A0CT[N%
  1111. XM_[X@+P`((B\`!"QZ_S(O5P`(4(].[O^X("\`""(O``0L>O\<+U<`"%"/3N[_U
  1112. XMLB`O``@B+P`$+'K_!B]7``A0CT[N_ZP@+P`((B\`!"QZ_O`O5P`(4(].[O_6;
  1113. XM("\`!"QZ_MXO5P`$6(].[O_$("\`!"QZ_LPO5P`$6(].[O_*("\`!"QZ_KHO>
  1114. XM5P`$6(].[O_<("\`!"QZ_J@O5P`$6(].[O_B*E]'^OZD)T__W"=(_^0G0/_@;
  1115. XM+'@`!"=.__QP`$/Z`>).KOW8)T#_^'``0_H!X$ZN_=@G0/_L<`!#^@'C3J[]2
  1116. XMV"=`__!P`$/Z`>=.KOW8)T#_Z'``0_H!Z$ZN_=@G0/_TD\E.KO[:*$!*K`"L=
  1117. XM9P``QI[\`(`@3R=(_\J>_`$`(D]P`#(\`/XD;`"LU<K5RB0J`#3EBB="_]@DE
  1118. XM:@`0U<K5RB#)4D!T`!0:4T(2VE-!4<K_^D(94T$D*__@)&O_Y&!4#`<`(&-.E
  1119. XM#$``(&1.4D`@R0P'`")F(A+'4T%B!$(98#H>&E.";PH,!P`B9NH2QU-!0AE3$
  1120. XM06,D8!P2QU-!8@1"&6`8'AI3@F\&#`<`(&+J0AE306,&'AI3@FZF-T#_SBQK_
  1121. XM__A.KO_*)T#_U$ZN_\0G0/_08&XG;`"$_]A![`!<3J[^@$'L`%Q.KOZ,)T#_?
  1122. XMQB1`+'K]3B1J`"0B*@``3J[_@B!J``0N#Y[\`0`B3T7Z`.!P$!+:4<C__'!_[
  1123. XM$MA7R/_\0ADB#R0\```#[4ZN_^(G0/_4)T#_T.6(($`I:``(`*0N1TGZ_01.^
  1124. XME2YZ_-H@.OS`9QPL>OSL(CK\P$ZN_]PL>``$3J[_?")Z_*9.KOZ&(GK\T"QX2
  1125. XM``1.KOYB(GK\N$ZN_F(B>ORT3J[^8B)Z_*1.KOYB(GK\J$ZN_F(@.OQN3G5D3
  1126. XM;W,N;&EB<F%R>0!G<F%P:&EC<RYL:6)R87)Y`&EN='5I=&EO;BYL:6)R87)Y_
  1127. XM`&QA>65R<RYL:6)R87)Y`&UA=&AF9G`N;&EB<F%R>0!205<Z,3`O,3`O,S(P5
  1128. XM+S@P+P```````^P````!`````@```#X````````#\@```^D```+1````````J
  1129. XM`````````````````````````````````````````````````````````````
  1130. XM`````````````````````````````````````````````````````````````
  1131. XM`````````````````````````````````````````````````````````````
  1132. XM`````````````````````````&EN/B``(&YO="!F;W5N9`!O=70^(`````"@X
  1133. XM3E4``&``"GA.50``-#D`````1_D````$0C,@`#\\`$](>0````1.N0``"%I"H
  1134. XM>0````!.74YU3E4``#0Y`````$?Y````!!>M``@@`%)Y``````QY`$\`````&
  1135. XM9@``!&&H3ET@7U2/3M!.5?_\0FW__DAY````5$ZY````$`PY``@```!49@``;
  1136. XM,$IM__YC```D'SP`"$ZY````_A\\`"!.N0```/X?/``(3KD```#^4VW__F``8
  1137. XM`#H,.0`@````5&,``"X,;0!/__YD```D'SD```!43KD```#^-"W__D?Y````@
  1138. XM!!>Y````5"``4FW__@PY``@```!49P#_>`PY`"````!48@#_;$IM__YC``!N.
  1139. XM#&T`3__^9```9#0M__Y30D?Y````!`PS`"X@`&8``$Y";?_\-"W__D?Y````-
  1140. XM!#@M__PD;0`(%[)``"``-"W__"9M``@?,R``3KD```#^4FW__E)M__PT+0`,W
  1141. XM."W__+A"8@``"@QM`$___F:X-"W__D?Y````!$(S(`!.72!?7(].T$Y5```_U
  1142. XM/``$2'D```"@3KD```$R/RT`#"\M``AA`/ZZ##D`&P```%1G```T2'D```!Z:
  1143. XM/SP`3TAY````!$(G3KD```&P2CD```!Z9P``$C\\``I(>0```*5.N0```3).9
  1144. XMN0```21*.0```'IG```,##D`&P```%1FC`PY`!L```!45L)$`A/"`````Q/YJ
  1145. XM`````P```)].72!?7(].T$Y5```_/``%2'D```"P3KD```$R/RT`#"\M``AA@
  1146. XM`/X>##D`&P```%1G```<2'D```!6/SP`3TAY````!!\\``%.N0```;!.N0``4
  1147. XM`21*.0```%9G```,##D`&P```%1FI`PY`!L```!45L)$`A/"`````A/Y````D
  1148. XM`@```)].72!?7(].T$Y5``!(>0```'H_+0`,+RT`"$(G3KD```&P2CD```!ZL
  1149. XM5\)$`A/"````GQ/Y````GP````-.72!?7(].T$Y5``!(>0```%8_+0`,+RT`"
  1150. XM"!\\``%.N0```;!*.0```%97PD0"$\(```"?$_D```"?`````DY=(%]<CT[0H
  1151. XM3E4``$HY`````V<``!1(>0```'I.N0```5!".0````-.74YU3E4``$HY````)
  1152. XM`F<``!1(>0```%9.N0```5!".0````).74YU3E4``$HY`````V<``"9(>0``.
  1153. XM`'HO+0`(3KD```/D2CD```![5\)$`A/"````GV````PO+0`(3KD````03ET@/
  1154. XM7UB/3M!.50``2CD````#9P``)DAY````>B\M``A.N0```X9*.0```'M7PD0"F
  1155. XM$\(```"?8```"$(Y````GTY=(%]8CT[03E7_^D)M__XT+0`,.T+__$HY````5
  1156. XM`V<``%Y(>0```'I(;?_[3KD```/D#"T`(/_[8@``"DHY````>V?>-"W__K1MA
  1157. XM__QB```4-"W__B9M``@7K?_[(`!2;?_^2'D```!Z2&W_^TZY```#Y`PM`"#_T
  1158. XM^V+*8```M$AM__M.N0```!`,+0`@__MB```*#"T`&__[9N0,+0`(__MG```,&
  1159. XM#"T`(/_[8P``A`PM``C_^V8``#I*;?_^8P``+E-M__Y*.0```%5G```@'SP`1
  1160. XM"$ZY````_A\\`"!.N0```/X?/``(3KD```#^8```-#0M__ZT;?_\8@``*#0MN
  1161. XM__XF;0`(%ZW_^R``4FW__DHY````56<```P?+?_[3KD```#^2&W_^TZY````^
  1162. XM$&``_VPT+?_^M&W__&(```XT+?_^)FT`"$(S(``3[?_[````GDY=(%]<CT[0>
  1163. XM3E7_\&```#!.50``)FT`"#0K__PF;0`(1^O_\"1M``@5<R``__LF;0`(4FO_(
  1164. XM_$Y=(%]8CT[0/SP`"4AM__!A`/YP0FW__$A58;X,+0`@__MF```(2%5AL&#P'
  1165. XM#"T`+?_[9@``$!M\``'_^DA589I@```40BW_^@PM`"O_^V8```9(56&$#"T`@
  1166. XM,/_[90``;`PM`#G_^V(``&)";?_^$_P``0```)\T+?_^Q?P`"G@`&"W_^P1$N
  1167. XM`##41#M"__Y(56$`_T@,+0`P__ME```*#"T`.?_[8]!*+?_Z9P``$C0M__Y$#
  1168. XM0B9M``@V@F````HF;0`(-JW__F````A".0```)].72!?6(].T$Y5__!@```P-
  1169. XM3E4``"9M``@T*__\)FT`"$?K__`D;0`(%7,@`/_[)FT`"%)K__Q.72!?6(].!
  1170. XMT#\\``E(;?_P80#]:D)M__Q(56&^#"T`(/_[9@``"$A58;!@\`PM`##_^V4`M
  1171. XM`%0,+0`Y__MB``!*0FW__A/\``$```"?-"W__L3\``IX`!@M__L$1``PU$0[Q
  1172. XM0O_^2%5A`/]R#"T`,/_[90``"@PM`#G_^V/0)FT`"#:M__Y@```(0CD```"?<
  1173. XM3ET@7UB/3M!.50``2CD````"9P``%DAY````5A\M``A.N0``!%!@```,'RT`2
  1174. XM"$ZY````_DY=(%]4CT[03E4``$HY`````F<``!9(>0```%8_+0`(3KD```.VH
  1175. XM8```"$(Y````GTY=(%]4CT[03E4``$HY`````F<``!9(>0```%8?/``*3KD`5
  1176. XM``108```"$ZY```!)$Y=3G5.5?_\2CD````"9P``1D)M__XT+0`,."W__KA";
  1177. XM8@``,#0M__XF;0`(2C,@`&<``"!(>0```%8T+?_^)FT`"!\S(`!.N0``!%!2>
  1178. XM;?_^8,1@```0/RT`#"\M``A.N0```3).72!?7(].T$Y5__1";?_^-"T`"DI"`
  1179. XM;`)$0CM"__PT+?_^1^W_]'@`."W__(C\``I(1`9$`#`7A"``=``T+?_\A/P`H
  1180. XM"CM"__Q2;?_^2FW__&;,2FT`"FP``!0T+?_^1^W_]!>\`"T@`%)M__XT+0`(M
  1181. XMM&W__F,``!!3;0`('SP`(&$`][1@YE-M__XT+?_^1^W_]!\S(`!A`/>>2FW_&
  1182. XM_F;F80#W9DY=(%]8CT[03E7_\$)M__XT+?_^XT)'[?_P>``X+0`*B/P`"DA$<
  1183. XM-X0@`'0`-"T`"H3\``H[0@`*4FW__DIM``IFSC0M``BT;?_^8P``$%-M``@?=
  1184. XM/``@80#W.F#F4VW__C0M__[C0D?M__`X,R``!D0`,!\$80#W'$IM__YFWF$`,
  1185. XM]N1.72!?6(].T$Y5__!";?_^-"W__N-"1^W_\'@`."T`"@)$``<WA"``=``TD
  1186. XM+0`*YDH[0@`*4FW__@QM``7__F;02FT`"F8``!0T+?_^XT)'[?_P0G,@`&``Q
  1187. XM`!(T+?_^XT)'[?_P-[P``2``4FW__C0M``BT;?_^8P``$%-M``@?/``@80#V<
  1188. XMC&#F4VW__C0M__[C0D?M__`X,R``!D0`,!\$80#V;DIM__YFWF$`]C9.72!?1
  1189. XM6(].T$Y5``!@``!`3E4``'0`-"T`#`)"``\[0@`,#&T`"@`,9```#`9M`#``*
  1190. XM#&````@&;0`W``PT+0`,'P)A`/8>3ET@7UR/3M`,;0`$``AC```04VT`"!\\[
  1191. XM`"!A`/8`8.AT`#0M``IX#.AJ/P)(56&:=``T+0`*X$H_`DA588QT`#0M``KHH
  1192. XM2C\"2%5A`/]^/RT`"DA580#_=&$`]91.72!?6(].T!/\``$```!53EU.=0``9
  1193. XM`^P```!9`````P``"SP```B,```(8```"#X```@T```((@``"`X```@$```'C
  1194. XMV@``!]````>^```'?```!OH```:@```%]```!;@```5N```%#```!.8```3,3
  1195. XM```$P@``!*0```2:```$D```!(````1V```$5@``!$P```0\```$,@``!"0`F
  1196. XM``08```$#@``!`````/T```#Z@```]@```/4```#S@```\0```.L```#F@``L
  1197. XM`Y8```.0```#A@```W````->```#6@```U0```-*```#0````S0```,>```#H
  1198. XM%````PH```+P```"V@```M8```+0```"Q@```KP```*P```"G@```I````*"'
  1199. XM```">````FX```)4```".@```?(```':```!N````:P```&>```!F````8@`Q
  1200. XM``%T```!.@```2P```$0```!"````/P```#V````Z````-P```#.````R```#
  1201. XM`.(```"V````#@````0```**```#*````X````.^```#^@``!!X```1&```$2
  1202. XMB@``!-8```46```'Y```"!@```A(```(G@```!4````%```!,@```5````%:Y
  1203. XM```!9````8X```(2```"6@```J0```*J```"]@```RX```1D```%+```!7P`Y
  1204. XM``6&```%D```!<8```70```'\@``"%(```BV`````````_(```/I```!,```C
  1205. XM```````$3E4``&``!*).5?_\)FT`"$H39P``!F```'(D*P`*M*L`%F<``!XO$
  1206. XM"R\K``8O*P`6+SS_____3KD```%6)E\K0/_\)"L`%M2K`!XG0@`*0BL`(B\+)
  1207. XM+RL`!B\K``XO*P`>3KD```',)E\K0/_\#*W_______QF```4%KP``2\+3KD`]
  1208. XM``#`)E\G0``"3ET@7UB/3M!.5?_\)FT`#$HK`")G```.+PLO+0`,80#_7B9?+
  1209. XM2A-G```*0JL`&F```(8D*P`*M*T`"&<``!XO"R\K``8O+0`(+SS_____3KD`N
  1210. XM``%6)E\K0/_\+PLO*P`&+RL`#B\K`!).N0```2(F7RM`__P,K?_______&8`;
  1211. XM`!H6O``!+PM.N0```,`F7R=```(K:P`2__PG;0`(`!9T`"="`!HG;?_\`!XDY
  1212. XM*P`6U*L`'B="``I.72!?4(].T$Y5```F;0`(2BL`(F<```XO"R\M``AA`/ZHG
  1213. XM)E\O"R\K``9.N0```!0F7R\++RL`#B\K`!).N0```/8F7TY=(%]8CT[03E7_@
  1214. XM_B9M``@O"TZY````2AM`__].72!?7(].T$Y5__PF;0`00A-"*P`!=``G0@`"3
  1215. XM=``G0@`*)WD``````!(O"R\K`!)"ITZY````:"9?)T``#G0`)T(`%G0`)T(`A
  1216. XM&G0`)T(`'D(K`")*JP`.9@``"A:\``)@``"@2BT`"&<``#HO"R1M``HO"B\\$
  1217. XM```#[DZY````\B9?)T``!DJK``9F```4%KP``2\+3KD```#`)E\G0``"8```S
  1218. XM2"\+)&T`"B\*+SP```/M3KD```#R)E\G0``&2JL`!F8``!@6O``!+PM.N0``I
  1219. XM`,`F7R=```)@```0+PLO+0`00J=A`/X,)E]*$V<``!0O"R\K``XO*P`23KD`*
  1220. XM``#V)E].72!?3^\`#$[03E4``"9M``PD+0`(M*L`%F4``"0D*P`6U*L`'B@M]
  1221. XM``BX@F0``!(D+0`(E*L`%B="`!I@```2+PLO+0`,+RT`"&$`_:0F7TY=(%]0B
  1222. XMCT[03E4``"9M``PD*P`6U*L`&B1M``@D@DY=(%]0CT[03E7__"9M``PD*P`>]
  1223. XMM*L`$F0``!0D*P`6U*L`'B1M``@D@F```#HO"R\K``9"IR\\`````4ZY```![
  1224. XM5B9?*T#__"\++RL`!B\K``HO//____].N0```58F7R1M``@D@$Y=(%]0CT[0M
  1225. XM3E7__B\M``Q(;?_^3KD```/D+RT`#$AM__].N0```^0F;0`(-JW__DY=(%]0F
  1226. XMCT[03E7__CMM``C__B\M``H?+?_^3KD```10+RT`"A\M__].N0``!%!.72!?Y
  1227. XM7(].T$Y5__PF;0`,)"L`&K2K`!YD``!")"L`#M2K`!HK0O_\)&W__")M``@2E
  1228. XMDE*K`!HD*P`:M*L`$F8``!@O"R\M``PD*P`6U*L`&B\"80#\:B9?8```$A:\B
  1229. XM``$7?``!``$D;0`(0A).72!?4(].T$Y5__PF;0`*%WP``0`B)"L`#M2K`!HK\
  1230. XM0O_\)&W__!2M``@D*P`:M*L`'F8```92JP`>4JL`&B0K`!JTJP`29@``&"\+H
  1231. XM+RT`"B0K`!;4JP`:+P)A`/OV)E].72!?7(].T"0\```$`"/"`````$Y=3G4`6
  1232. XM``/L````!P````0```2X```!S````Y0```.B```#R@```]@````$````#@``Y
  1233. XM``<```!`````:@```(@```#B````_````1H```%T```!H````B0```(^```"P
  1234. XM7````G8```-6```#<@````,````(```!A@```=P```*D`````````_(```/I8
  1235. XM````8@`````````$3E4``&```79.50``0CD````#2CD````"9P``%B9M``@6T
  1236. XMN0````%".0````)@```X+SD````2)FT`""\++SP````!3KD```$B)`!*@F8`*
  1237. XM``X3_``!`````V````PF;0`($],````!3ET@7UB/3M!.5?_\0CD````#2CD`=
  1238. XM```"9P``%B9M``@6N0````%".0````)@``!*+SD````2+SP````!3KD```&TS
  1239. XM%`!*`F<``"HO.0```!(F;0`(+PMT`2\"3KD```$B*T#__"9M``@3TP````%@8
  1240. XM```()FT`"$(33ET@7UB/3M!.50``$_P``0````).74YU3E7__"\Y````#D?M2
  1241. XM``@O"W0!+P).N0```<PK0/_\3ET@7U2/3M!.50``'SP`"F'03EU.=4Y5__I"2
  1242. XM;?_Z-"T`##@M__JX0F(``!@T+?_Z)FT`"$HS(`!G```(4FW_^F#<+SD````.0
  1243. XM)FT`""\+=``T+?_Z+P).N0```<PK0/_\3ET@7UR/3M!.74YU```#[`````4`C
  1244. XM```"```!8````00```"Z````H````#H````-````!0```/8```#8````E@``R
  1245. XM`)````""````?````&H```!<````,````"H````<````%@````0````%````I
  1246. XM!P```$P```"L````R@```10```%T`````````_(```/I```!:P````!.50``#
  1247. XM8``%G$Y5__Y";?_^-"W__B9M``A*,R``9P``"%)M__Y@ZC`M__Y@```"3ET@?
  1248. XM7UR/3M!.5?_^0FW__C0M__XF;0`(2C,@`&<``#`T+?_^)FT`"#@M__XD;0`(5
  1249. XM'#)```P&`&%E"@P&`'IB!`(&`%\7AB``4FW__F#"3ET@7UR/3M!.5?_^0FW_E
  1250. XM_C0M__XF;0`.."W__B1M``@<,R``O#)``&8``"`T+?_^)FT`#DHS(`!F```(E
  1251. XM<`%@```\4FW__F````9@```$8,`T+?_^)FT`#C@M__XD;0`('#,@`+PR0`!CM
  1252. XM```,<`)@```,8```"'``8````DY=(%]/[P`,3M!.50``-"T`$E)""`(``&<"3
  1253. XM4D*>PB9M``XK3P`.)$]30A3;4<K__#0M``Q20@@"``!G`E)"GL(F;0`(*T\`G
  1254. XM""1/4T(4VU'*__P_+0`2+RT`#F$`_N(_+0`,+RT`"&$`_M8_+0`2+RT`#C\MC
  1255. XM``PO+0`(80#_$&````).72!?3^\`#$[03E7__D)M__XT+?_^)FT`"$HS(`!G=
  1256. XM```L-"T`$C@M__ZX0F0``!XT+?_^)FT`#C@M__XD;0`(%[)``"``4FW__F#&"
  1257. XM-"W__B9M``Y",R``3ET@7T_O``Q.T$Y5__Q";?_^/RT`$B\M``YA`/X:.T#_+
  1258. XM_#0M__XF;0`(2C,@`&<``#(T+0`2M&W__&(```9@```H-"W__"9M``XX+?_^)
  1259. XM)&T`"!>R0``@`%)M__Q2;?_^8,!@```$8+HT+?_\)FT`#D(S(`!.72!?3^\`0
  1260. XM#$[03E7_\#\M``XO+0`*80#]JCM`__X_+0`4+RT`$&$`_9H[0/_\-"T`%#M"H
  1261. XM__HT+?_\E&T`"%)".T+_^#MM__S_]C0M__;4;?_^.T+_]#0M``C4;?_^M&W_)
  1262. XM^F4``"(T+?_ZE&T`"#M"__XT+?_Z)FT`$$(S(`!";?_X8```3#0M``C4;?_^I
  1263. XMU&W_^+1M__IE```X-"W_^B9M`!!",R``-"T`"-1M__XX+?_ZF$([1/_X-"T`W
  1264. XM"-1M__A30CM"__8T+?_Z4T([0O_T.VW_]O_P.VW_]/_R2FW_^&,``"8T+?_R'
  1265. XM)FT`$#@M__`D;0`0%[)``"``4VW_\E-M__!3;?_X8-0[;0`(__)";?_P2FW_!
  1266. XM_F,``"8T+?_R)FT`$#@M__`D;0`*%[)``"``4FW_\E)M__!3;?_^8-1.72!?-
  1267. XM3^\`#D[03E7__$)M__X[;0`(__PT+?_^)FT`"DHS(`!G```^-"T`%+1M__QF3
  1268. XM```2-"W__"9M`!!",R``8```(C0M__PF;0`0."W__B1M``H7LD``(`!2;?_\'
  1269. XM4FW__F"T3ET@7T_O``Y.T$Y5__PT+0`*U&T`"#M"__X[;0`*__PT+?_^)FT`.
  1270. XM#$HS(`!G```B-"W__"9M``PX+?_^)&T`#!>R0``@`%)M__Y2;?_\8-`T+?_\7
  1271. XM)FT`#$(S(`!.72!?3^\`"D[03E7__#MM``K__D)M__Q*;0`(8P``1#0M__XFE
  1272. XM;0`,2C,@`&<``#0T+0`6."W__+A"9```)C0M__PF;0`2."W__B1M``P7LD``5
  1273. XM(`!2;?_^4FW__%-M``A@MC0M__PF;0`20C,@`$Y=(%]/[P`03M!.5?_Z.VT`D
  1274. XM"O_^-"W__K1M``AB``!J0FW__#MM__[_^C0M__PF;0`,2C,@`&8```HP+?_^$
  1275. XM8```3C0M__HF;0`22C,@`&8```AP_V```#@T+?_Z)FT`$C@M__PD;0`,'#,@J
  1276. XM`+PR0`!G```&8```#%)M__Q2;?_Z8*A2;?_^8(QP_V````).72!?3^\`$$[00
  1277. XM3E7__CMM``K__C0M__ZT;0`(8@``-#0M__XF;0`.2C,@`&<``"0T+?_^)FT`$
  1278. XM#A@S(`"X+0`,9@``"C`M__Y@```.4FW__F#"</]@```"3ET@7T_O``Q.T$Y=.
  1279. XM3G4``````^P````!````!@`````````````#\@```^D```"/``````````1!N
  1280. XM^O_Z(6S_^/_\3G4B+P`$+'K_YB]7``18CT[N_]PB+P`$+'K_U"]7``18CT[N8
  1281. XM_X@B+P`$+'K_PB]7``18CT[N_X(B+P`$+'K_L$ZN_[A$`"!?6(].T"(O``0L7
  1282. XM>O^<+U<`!%B/3N[_H"(O``@D+P`$+'K_ADZN_YI$`"!?4(].T"(O``@D+P`$!
  1283. XM+'K_;DZN_Y1$`"!?4(].T"(O``@D+P`$+'K_5DZN_XY$`"!?4(].T"QZ_T9./
  1284. XM[O_*+'K_/D[N_WPB+P`$+'K_,DZN_RA$`"!?6(].T"(O``@D+P`$+'K_&B]7=
  1285. XM``A0CT[N_ZPB+P`()"\`!"QZ_P0O5P`(4(].[O_B+'K^]D[N_\0B+P`$+'K^#
  1286. XMZB]7``18CT[N_RXB+P`,)"\`""8O``0L>O[0+U<`#$_O``Q.[O_6(B\`""0OB
  1287. XM``0L>OZX3J[_LD0`(%]0CT[0(B\`#"0O``@F+P`$+'K^G"]7``Q/[P`,3N[_U
  1288. XMOB(O``@D+P`$+'K^A$ZN_TQ$`"!?4(].T"(O``@D+P`$+'K^;$ZN_T9$`"!?A
  1289. XM4(].T"(O``0L>OY8+U<`!%B/3N[_IB(O``@D+P`$+'K^0DZN_S1$`"!?4(].5
  1290. XMT"(O``PD+P`()B\`!"QZ_B8O5P`,3^\`#$[N_]`B+P`,)"\`""8O``0L>OX*1
  1291. XM3J[_(D0`(%]/[P`,3M`B+P`$+'K]]"]7``18CT[N_VHB+P`$+'K]XB]7``18&
  1292. XMCT[N_V0B+P`$+'K]T"]7``18CT[N_T````/L`````0````<````$````````=
  1293. XM`_(```/I````3P````!.=2`O`!0B+P`0)"\`#"!O``@B;P`$+'@`!"]7`!1/3
  1294. XM[P`43N[]EB`O``@B;P`$+'@`!"]7``A0CT[N_S0@;P`(("\`!"QX``0O5P`(B
  1295. XM4(].[O]&(&\`!"QX``0O5P`$6(].[O\B("\`""(O``0L>``$+U<`"%"/3N[_E
  1296. XM.B(O``0L>``$+U<`!%B/3N[_*"!O``PB;P`(("\`!"QX``0O5P`,3^\`#$[N2
  1297. XM_9`@;P`,(F\`""`O``0L>``$+U<`#$_O``Q.[OV*(&\`#")O``@@+P`$+'@`&
  1298. XM!"]7``Q/[P`,3N[_0"!O``0L>``$+U<`!%B/3N[_'")O``@@+P`$+'@`!"]7X
  1299. XM``A0CT[N_RXB;P`*)&\`!C`O``0L>``$+U<`"D_O``I.[O^R(F\`!"QX``0O`
  1300. XC5P`$6(].[OWJ``````/L`````0````@``````````````_*R$
  1301. X``
  1302. Xend
  1303. Xsize 18260
  1304. SHAR_EOF
  1305. echo "End of archive 1 (of 1)"
  1306. # if you want to concatenate archives, remove anything after this line
  1307. exit
  1308.